package algo3.modelo.armas;

import java.util.ArrayList;

import algo3.modelo.IModificablePorTurnos;
import algo3.modelo.IPosicionable;
import algo3.modelo.Posicion;
import algo3.modelo.barcos.Barco;

public abstract class Arma implements IModificablePorTurnos, IPosicionable{
	public int costo;
	protected ArrayList<Danio> listaDeDanios = new ArrayList<Danio>();
	public int turnosParaExplotar;
	protected Posicion posicion;

	public int getCosto(){
		return this.costo;
	}

	protected void agregarDanio(Posicion posicion,Class<? extends Arma> tipoDeArma){
		Danio danio = new Danio(posicion,tipoDeArma);
		this.listaDeDanios.add(danio);
	}

	public ArrayList<Danio> getListaDeDanios(){
		EstadosDeArma estado = this.getEstado();
		if(estado == EstadosDeArma.activo)
		{
			return this.listaDeDanios;
		}
		else { 
			return (new ArrayList<Danio>());
		}
	}

	public void avanzarTurno(){
		if(this.getEstado() != EstadosDeArma.gastado){
			this.turnosParaExplotar --;
		}
		
	}


    public EstadosDeArma getEstado(){
		//Los disparos directos duran un turno y se encuentran en estado activo
		//Las minas se encuentra enEspera luego de pasado los 3 turnos
		//pasan a estado activo
		//Un turno después del estado activo tanto las minas como los disparos
		//pasan a estado gastado.

		switch(turnosParaExplotar)
		{
		case 0: 
			return (EstadosDeArma.gastado);
		case 1: 
			return (EstadosDeArma.activo); 
		default:
			return (EstadosDeArma.enEspera);
		}
	}
    
    public abstract void recibeImpactoDe(Barco unBarco);
    	//No tiene Comportamiento. En ningún arma salvo la mina por contacto
    

	public Posicion getPosicion() {
		return this.posicion;
	}

	public void setPosicion(Posicion pos) {
		this.posicion = pos;	
	}
	
}

